package gns

import (
	"gitee.com/liumou_site/gns/detect"
	"gitee.com/liumou_site/gns/eth"
	"gitee.com/liumou_site/gns/ip"
	"gitee.com/liumou_site/gns/ping"
	"gitee.com/liumou_site/gns/port"
	"gitee.com/liumou_site/gns/tools"
)

// GNSManager 主管理结构体，绑定所有子模块功能
type GNSManager struct {
	Ping  *ping.Ping
	Eth   *eth.Eth
	IP    *ip.IPManager
	Tools *tools.ToolsManager
}

// NewGNSManager 创建并初始化一个新的GNSManager实例
func NewGNSManager(debug bool) *GNSManager {
	return &GNSManager{
		Ping:  ping.NewPing(5, 5),
		Eth:   eth.NewEth(debug),
		IP:    ip.NewIPManager(),
		Tools: tools.NewToolsManager(),
	}
}

// NewPing 创建并初始化一个 ping.Ping 实例。
func NewPing(count, timeout int) *ping.Ping {
	return ping.NewPing(count, timeout)
}

// NewEth 创建并初始化一个 eth.Eth 实例。
func NewEth(debug bool) *eth.Eth {
	return eth.NewEth(debug)
}

// NewIP 创建并初始化一个 ip.IPManager 实例。
func NewIP() *ip.IPManager {
	return ip.NewIPManager()
}

// NewTools 创建并初始化一个 tools.ToolsManager 实例。
func NewTools() *tools.ToolsManager {
	return tools.NewToolsManager()
}

// NewOnlineDetector 创建并初始化一个 detect.OnlineDetector 实例
func NewOnlineDetector(ips []string, portNum int, pingCount, pingTimeout, portTry, portTimeout int) *detect.OnlineDetector {
	pinger := ping.NewPing(pingCount, pingTimeout)
	checker := port.NewPortChecker("tcp", portTry, portTimeout)
	return detect.NewOnlineDetector(ips, portNum, pinger, checker)
}
